package com.orzxlee.FunctionInterface03;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

/**
 * 第四节 函数接口 函数式接口作为方法的返回值
 *
 * 定义一个测试类Demo
 *      Comparator<String> getComparator() 返回值Comparator 是一个函数式接口
 *      调用getComparator()
 *
 *      重点: 如果需要返回的返回值是 函数式接口,可以通过Lambda表达式替代
 *
 */
public class Demo {
    public static void main(String[] args) {

        //构造使用场景,根据字符串长度排序
        //1.定义集合,存储字符串元素
        ArrayList<String> array = new ArrayList<String>();
        array.add("cccc");
        array.add("aa");
        array.add("b");
        array.add("ddd");
        System.out.println("排序前: "+array);

        //对字符串进行排序
        //自然顺序排序
        //Collections.sort(array);

        //按照指定比较器进行排序
        Collections.sort(array,getComparator());
        System.out.println("排序后: "+array);

        //按照指定比较器进行排序
        //Lambda表达式简化写法   如果需要返回的返回值是 函数式接口,可以通过Lambda表达式替代
        Collections.sort(array,(o1, o2) -> o1.length()-o2.length());
        System.out.println("排序后: "+array);



    }

    private static Comparator<String> getComparator() {
       //匿名内部类方式实现
//        Comparator<String> comparator = new Comparator<String>() {
//            @Override
//            public int compare(String s1, String s2) {
//                return s1.length()-s2.length();
//            }
//        };
//        return comparator;

       //匿名内部类方式实现
//        return  new Comparator<String>() {
//            @Override
//            public int compare(String s1, String s2) {
//                return s1.length()-s2.length();
//            }
//        };
        //Lambda表达式实现  作为Comparator函数式接口返回
        return (o1, o2) -> o1.length()-o2.length();

    }
}
